<?php
/**
 * User: 五哥派
 * Date: 2024/7/17
 * Tel(同WX): 17335592719
 */
declare (strict_types = 1);

namespace app\common\lib\wechat;

use app\common\exception\BaseException;
use app\common\lib\helper;

/**
 * 微信小程序订单管理
 * Class WxUser
 * @package app\common\lib\wechat
 */
class WxOrder extends WxBase
{
    /**
     * 发货信息录入接口
     */
    /**
     * @param $order_number_type
     * @param $transaction_id 原支付交易对应的微信订单号
     * @param $mchid  支付下单商户的商户号，由微信支付生成并下发。
     * @param $out_trade_no 商户系统内部订单号，只能是数字、大小写字母`_-*`且在同一个商户号下唯一
     * @param $tracking_no 物流单号，物流快递发货时必填，示例值: 323244567777 字符字节限制: [1, 128]
     * @param $express_company  物流公司编码，快递公司ID，参见「查询物流公司编码列表」，物流快递发货时必填， 示例值: DHL 字符字节限制: [1, 128]
     * @param $item_desc    商品信息，例如：微信红包抱枕*1个，限120个字以内
     * @param $upload_time 上传时间，用于标识请求的先后顺序 示例值: `2022-12-15T13:29:35.120+08:00`
     * @param $openid 用户标识，用户在小程序appid下的唯一标识。 下单前需获取到用户的Openid 示例值: oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 字符字节限制: [1, 128]
     * @return array|false|mixed
     * @throws \cores\exception\BaseException
     */
    public function shipping($transaction_id, $mchid, $out_trade_no, $tracking_no, $express_company, $item_desc, $upload_time, $openid)
    {

        $access_token = $this->getAccessToken();
        $url = 'https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=' . $access_token;

        //logistics_type	物流模式，发货方式枚举值：1、实体物流配送采用快递公司进行实体物流配送形式 2、同城配送 3、虚拟商品，虚拟商品，例如话费充值，点卡等，无实体配送形式 4、用户自提
        //delivery_mode 发货模式，发货模式枚举值：1、UNIFIED_DELIVERY（统一发货）2、SPLIT_DELIVERY（分拆发货） 示例值: UNIFIED_DELIVERY
        //shipping_list 物流信息列表，发货物流单列表，支持统一发货（单个物流单）和分拆发货（多个物流单）两种模式，多重性: [1, 10]
        $order_number_type = 2;//订单单号类型，用于确认需要上传详情的订单。枚举值1，使用下单商户号和商户侧单号；枚举值2，使用微信支付单号。
        $result = helper::jsonDecode($this->post($url, [
            //订单，需要上传物流信息的订单
            'order_key' => [
                'order_number_type' => $order_number_type,
                'transaction_id' => $transaction_id,
                'mchid' => $mchid,
                'out_trade_no' => $out_trade_no,
            ],
            'logistics_type' => 1,
            'delivery_mode' => 'UNIFIED_DELIVERY',
            'shipping_list' => [
                'tracking_no' => $tracking_no,
                'express_company' => $express_company,
                'item_desc' => $item_desc

            ],
            'upload_time' => $upload_time,//发货时间
            'payer' => [
                'openid' => $openid
            ]
        ]));
        if (isset($result['errcode'])) {
            $this->error = $result['errmsg'];
            return false;
        }
        return $result;
    }
}